package com.ybkj.o2o.sales.service;


import com.ybkj.o2o.sales.entity.Coupon;
import com.ybkj.o2o.sales.entity.CouponRule;

import java.math.BigDecimal;
import java.util.List;

/**
 * @author Shine.
 * 
 */
public interface CouponService {
  /**
   * 修改优惠券的线路
   * @param lineId
   * @param lineName
   */
  void updateCouponsLine(Long lineId, String lineName);

    /**
     * 查询优惠券已经绑定了哪些线路
     * @return
     */
    List<Long> findBindingCoupon();

  /**
   * 查询某个规则下用户绑定的优惠券数量
   * @param couponRuleId
   * @param phone
   * @param passengerId
   * @return
   */
  Integer couponTimes(Long couponRuleId, String phone, Long passengerId);

    /**
     * 获取一张没有绑定的线路优惠券
     * @param appKey
     * @param couponRuleId
     * @return
     */
    Coupon findOneCoupon(String appKey, Long couponRuleId);

  List<Coupon> findOneLineCoupon(List<Long> linesId);

    int updateCouponPriceAndLineId(Long id, String appKey, BigDecimal couponPrice, Long lineId);

  /**
   * 生成优惠券.
   * @param couponRule 优惠券规则
   * @param amount 数量
   */
  public void mass(CouponRule couponRule, Integer amount, String appKey);
//  public void mass(CouponRule couponRule, Integer amount, String appKey, Long lineId, BigDecimal linePrice,Double couponDiscount, String lineName);

  /**
   * 手动赠送优惠券.
   * 
   * @param passengerIds 客户id
   * @param couponRuleIds 优惠券规则id
   * @param amount 赠送数量
   * @param appKey 系统key
   */
  public void giftCoupon(String passengerIds, String couponRuleIds, String amount, String phone,
      String appKey);


  /**
   * 分页查询优惠券.
   * @param ruleId 优惠券规则id
   * @param code 编码
   * @param phone 手机号
   * @param offset 页数
   * @param size 每页数量
   * @param appKey 系统key
   * @return DataGrid
   */
  public List<Coupon> selectByRuleWithParams(Long ruleId, String code, String phone,
      Integer offset, Integer size, String appKey);

  /**
   * 统计优惠券信息.
   * 
   * @param ruleId 优惠券规则id
   * @param code 编码
   * @param phone 手机号
   * @return Long
   */
  long countByRuleWithParams(Long ruleId, String code, String phone, String appKey);


  /**
   * 根据优惠券ID查询.
   * 
   * @param ruleId 优惠券规则id
   * @return List
   */
  public List<Coupon> findAll(Long ruleId, String appKey);

  /**
   * 根据id查询优惠券.
   * 
   * @param id 优惠券id
   * @return Coupon
   */
  public Coupon findOne(Long id, String appKey);

  /**
   * 根据code查询优惠券.
   * 
   * @param code 编码
   * @return Coupon
   */
  public Coupon findOneByCode(String code, String appKey);

  /**
   * 修改优惠券.
   * @param coupon 优惠券内容
   */
  public void update(Coupon coupon);

  /**
   * 获取优惠券数量.
   * @param couponRuleId 优惠券规则id
   * @param appKey 系统key
   * @return Long
   */
  Long getRunningNumber(Long couponRuleId, String appKey);

  /**
   * 创建优惠券.
   * @param coupon 优惠券内容
   * @return Long
   */
  Long insertRecord(Coupon coupon);

  /**
   * 统计客户优惠券.
   * @param couponRuleId 优惠券id
   * @param passengerId 客户id
   * @return Long
   */
  Long countByRuleAndPassenger(Long couponRuleId, Long passengerId);

  Long countByRuleAndPassengerGroup(Long couponRuleId, Long passengerId);

  /**
   * 查询有效优惠券.
   * @param passengerId 客户id
   * @param appKey 系统key
   * @return List
   */
  List<Coupon> listValidByPassenger(Long passengerId, String appKey);


  /**
   * 分页查询优惠券.
   * @param passengerId 客户id
   * @param offset 页数
   * @param rows 每页数量
   * @param appKey 系统key
   * @param status 优惠券状态
   * @return List
   */
  List<Coupon> selectByPassenger(Long passengerId, Integer status, String couponType, Integer offset, Integer rows, String appKey);

  /**
   * 统计优惠券.
   * @param passengerId 客户id
   * @param appKey 系统key
   * @param status 优惠券状态
   * @return Long
   */
  long countByPassenger(Long passengerId, Integer status, String couponType, String appKey);

}
